//// 函数模板的隐式推断 类型实参
//#include <iostream>
//using namespace std;
//
//template<typename T>T Max(T x, T y) {
//    return x > y ? x : y;
//}
//template<typename T, typename D>void func(D x) {  // 1)
//}
//
//template<typename R, typename D>R hum(D x) {      // 3)
//    R r;
//    return r;
//}
//int main(void) {
//    int nx = 10, ny = 20;
//    cout << Max(nx, ny) << endl;
//    //      Max(nx,ny) ==> Max<>(nx,ny) ==> Max<int>(nx,ny)
//    double dx = 1.23, dy = 4.56;
//    cout << Max(dx, dy) << endl;
//    //      Max(dx,dy) ==> Max<>(dx,dy) ==> Max<int>(dx,dy)
//    string sx = "world", sy = "hello";
//    cout << Max(sx, sy) << endl;
//    //      Max(sx,sy) ==> Max<>(sx,sy) ==> Max<string>(sx,sy)
//
////  func(nx); // error:无法推断类型参数T                               1)
//    func<double>(nx); // func<double,int>(nx)
//
////  Max(nx,dy); // error:类型参数T推断出现歧义(int and double)         2)
//    Max(nx, (int)dy); // ok
//    Max<int>(nx, dy); // ok
//
////  int ret = hum(nx); // error:无法推断类型参数R                      3)
//    int ret = hum<int>(nx);
//    return 0;
//}
